Data processing systems which include multiple nodes and a common data bus for the sharing of data from one or more memory resources may include nodes which have their own memory "caches" for storing and processing data from the shared memory. "Nodes" in the data processing system are any uniquely identifiable entities coupled to the same memory resource, such as central processing units (CPU's) and input/output devices. The shared memory is generally interfaced with the nodes via a common data bus. The nodes with such caches must be interfaced with the shared memory so that blocks of data that they access and acquire are available to any of the nodes. For this purpose, the nodes may have either "write-through" or "write-back" caches.
When a node with a write-through cache decides that it has a need to access a certain block of data, it performs a read command to that block's location in the shared memory. This does not change the "block state" of that block in shared memory. The "block state" of the data block indicates the status of the data block, such as "FREE" or "OWNED".
While the data resides in the node's cache, reads of that data block from that node are referenced to the cache's copy, but writes to that data block update the original data block in shared memory. The write command updates the shared data block in memory, but does not change that data's block state. As the name implies, the node writes through the cache and into the shared memory.
More than one node may cache the same block of data at the same time, but all caching nodes must monitor the bus for write commands directed to the blocks that they have copies of in their respective caches. If a write command to a cached data block is detected, then all nodes that have a copy in their cache perform an invalidate operation on the copy so that it is no longer usable. If they need to read a data block after their cache copy is no longer usable, they send a read command to the data block in shared memory to receive a "clean" copy. In a write-through caching scheme, the data transfers between the cache and the shared memory do not change the block state of the shared memory data blocks.
When a node with a write-back cache decides that it has a need to access a certain block of data, one way it can perform an ownership read on that block's location in the shared memory is to set the block state of that block in shared memory to "OWNED" while the data resides in the node's cache.
While the data resides in the CPU's cache, both reads and writes to that data block use the cache's copy. Writes update the cache's copy of the data, but do not update the shared memory copy. The shared memory copy is updated when the node must "disown" the block because another node wishes to own that block of shared memory, or when the owning node is finished accessing that block.
In a write-back caching scheme, the data transfers between the cache and the shared memory affects the block state of the shared memory blocks. The block state is set to OWNED when the node "borrows" the data block, and the block state is set to FREE when the node "returns" the data block.
When a node with write-back cache "borrows" a data block and sets its block state to OWNED, it assumes that it has the only official copy of the data block. If a node with write-through cache attempts to pull the same data block into its cache, it is clear from the preceding description of the two caching schemes that the integrity of that data block has been lost.
Nodes that do not have any sort of memory cache at all only operate directly upon the data stored in the shared memory. Such nodes do not recognize "ownership" of the shared data as used in systems including nodes with write-back caches, so they cannot distinguish when the requested data is being updated by another one of the nodes.